/***************************************************************************
 *   Copyright (C) 2007 by Alexandre Masselot,,,   *
 *   alex@alex-laptop   *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU Library General Public License as       *
 *   published by the Free Software Foundation; either version 2 of the    *
 *   License, or (at your option) any later version.                       *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU Library General Public     *
 *   License along with this program; if not, write to the                 *
 *   Free Software Foundation, Inc.,                                       *
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
 ***************************************************************************/
#ifndef SPECTRUMINTENSITYPEAKUTILITIES_H
#define SPECTRUMINTENSITYPEAKUTILITIES_H
#include "spectrum.h"
#include "peakintensity.h"

/**
handles manipulations specialize to Spectrum<PeakIntensity>

	@author Alexandre Masselot,,, <alex@alex-laptop>
*/
namespace bol{
class SpectrumPeakIntensityUtilities{
private:
  class IntensityPeak:public Peak{
    private:
      size_t m_index;
    public:
      IntensityPeak(const double i):Peak(i){}
      void setIndex(size_t theValue) {
          m_index = theValue;
      }
      size_t index() const {
          return m_index;
      }
  
  };

public:
    SpectrumPeakIntensityUtilities();

    ~SpectrumPeakIntensityUtilities();

     /**
    * take a Spectrum<PeakIntensity> and set up intensity rank (0 is the most intense, 1 the second etc. for identic intensities, rank is the one of the highes for all but we'll count them to attribute the rank for the next intense peak)
    * @param spectrum 
    */
    static void computeIntensityRank(Spectrum<PeakIntensity*>&spectrum);
  };
}
#endif
